/**
  * @addtogroup 
  * 
  *
  * @brief 
  *
  * @code{c}
  * @endcode
  * @{
  * @file         bsc_electric_fence_tool_if.h
  * @brief        
  * @note
  * @author       Jpz(puzhao.jin@hopechart，靳普诏)
  * @date         2022-09-22
  * @version      1.0
  * 
  * @par          修改日志
  * <table>
  * <tr><th>Date        <th>Version          <th>Author                        <th>Description
  * <tr><td>2022-09-22  <td>1.0              <td>Jpz                           <td>创建初始版本
  * @copyright    杭州鸿泉物联网技术股份有限公司
  */



#ifndef _BSC_ELECTRIC_FENCE_IF_H_
#define _BSC_ELECTRIC_FENCE_IF_H_

#include "bsc_electric_fence/bsc_electric_fence_define.h"

#ifdef __cplusplus
extern "C" {
#endif


// 运动状态数据结构
typedef struct TBsElectricFenceMoveStatusTag TBsElectricFenceMoveStatus;
struct TBsElectricFenceMoveStatusTag
{
    UInt32  curr_time;  ///< 时间戳 （unix时间戳，单位s）  
    Int32  latitude;    ///< 纬度，单位 度/10^7
    Int32  longitude;   ///< 经度
    UInt16 speed_curr;  ///< 当前速度，单位 km/h
    // Int16  speed_dir;   ///< 速度方向
};


/**
 * 函数类型：获取运动状态信息
 * @param *ret_status 返回状态信息
 * @return 成功 True
 *         失败 False
 */
typedef Bool (* IBsElectricFenceDoGetMoveStatus)(TBsElectricFenceMoveStatus *ret_status);

/**
 * 函数类型：日志输出
 * @param *data       日志数据地址
 * @param data_size   日志长度
 * @return 成功 >= 0  日志输出长度
 *         失败 <  0
 */
typedef Int32 (* IBsElectricFenceDoLogOutput)(const Byte *data, Int32 data_size);


typedef struct IBsElectricFenceToolIfTag IBsElectricFenceToolIf;
struct IBsElectricFenceToolIfTag
{
    IBsElectricFenceDoGetMoveStatus DoGetMoveStatus;
    IBsElectricFenceDoLogOutput     DoLogOutput;
};


/* ~~~~~~~~~~~~~~~~~~~~~~ 接口集有效性检测 ~~~~~~~~~~~~~~~~~~~ */

/**
 * 判断接口集是否有效
 * @param *self 接口集句柄
 * @return 成功 True
 *         失败 False
 */
Bool IBsElectricFenceToolIfIsUsable(IBsElectricFenceToolIf *self);

/* ~~~~~~~~~~~~~~~~~~~~~~~ 触发接口 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ */

/**
 * 获取运动状态信息
 * @param *self
 * @param *ret_status 返回状态信息
 * @return 成功 True
 *         失败 False
 */
Bool IBsElectricFenceToolIfGetMoveStatus(IBsElectricFenceToolIf *self, TBsElectricFenceMoveStatus *ret_status);



/**
 * 日志输出
 * @param *self
 * @param *data       日志数据地址
 * @param data_size   日志长度
 * @return 成功 >= 0  日志输出长度
 *         失败 <  0
 */
Int32 IBsElectricFenceToolIfLogOutput(IBsElectricFenceToolIf *self, const Byte *data, Int32 data_size);

/* 简易日志输出接口 */
Int32 IBsElectricFenceToolIfLogPrintf(IBsElectricFenceToolIf *self, const Byte *data, ...);



#ifdef __cplusplus
}  ///< extern "C" {
#endif


#endif

